import { defineStore } from 'pinia'
import { reqLogin } from '@/api/user'
import { ref } from 'vue'
import { loginResponseData, loginForm } from '@/api/user/type.ts'
import { UserState } from '@/stores/modules/types/type.ts'
import { SET_TOKEN, GET_TOKEN } from '@/utils/token.ts'
import { constantRoute } from '@/router/routers.ts'

export const useUserStore = defineStore('user', () => {
  // 需要保存的 token
  const token: UserState = ref(GET_TOKEN())
  // 在仓库中存储路由
  const menuRoutes = constantRoute

  // 用户登录逻辑
  const userLogin = async (data: loginForm) => {
    // 登录请求
    const res: loginResponseData = await reqLogin(data)
    // console.log(res)
    /*
     * 如果登录成功 code -> 200
     * 如果登录失败 code -> 201
     * */
    if (res.code === 200) {
      // pinia 存储数据
      token.value = res.data.token
      // 本地化存储
      SET_TOKEN(token.value)
      // 返回成功的 promise
      return 'ok'
    } else {
      return Promise.reject(new Error(res.data.message))
    }
  }
  return {
    token,
    menuRoutes,
    userLogin,
  }
})
